package tp.tecnicasdisenio.model.accion;

import tp.tecnicasdisenio.dao.AlumnoDaoInterface;
import tp.tecnicasdisenio.dao.MateriaDaoInterface;
import tp.tecnicasdisenio.model.AccionInterface;
import tp.tecnicasdisenio.model.AutoRespondedorInterface;
import tp.tecnicasdisenio.model.MailInterface;
import tp.tecnicasdisenio.model.entity.Alumno;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.parser.ParserTituloAltaMateria;
import tp.tecnicasdisenio.model.validador.ValidadorInterface;
import tp.tecnicasdisenio.util.FechaUtil;

public class AccionAltaMateria implements AccionInterface{

	private AlumnoDaoInterface alumnoDao;
	private MateriaDaoInterface materiaDao;
	private ParserTituloAltaMateria parserTituloAltaMateria;
	private ValidadorInterface validadorAltaMateria;

	@Override
	public void aplicarSobre(MailInterface mail, AutoRespondedorInterface autoRespondedor) {
		if(!validadorAltaMateria.valido(mail, autoRespondedor)){
			return;
		}

		Alumno alumnoDelMail= parserTituloAltaMateria.extraerAlumno(mail);
		Alumno alumnoBD= alumnoDao.getPorId(alumnoDelMail.getPadron());
		Materia materiaBD= materiaDao.getPorEmail(mail.getTo().get(0));
		if(alumnoBD == null){
			alumnoDao.insertar(alumnoDelMail);
			alumnoDao.inscribir(alumnoDelMail, materiaBD, FechaUtil.getCuatrimestreActual());
		}else{
			alumnoDao.inscribir(alumnoBD, materiaBD, FechaUtil.getCuatrimestreActual());
		}
		
		System.out.println(this.getClass().getSimpleName() + " aplicada.");
	}

	public AlumnoDaoInterface getAlumnoDao() {
		return alumnoDao;
	}

	public void setAlumnoDao(AlumnoDaoInterface alumnoDao) {
		this.alumnoDao = alumnoDao;
	}

	public ParserTituloAltaMateria getParserTituloAltaMateria() {
		return parserTituloAltaMateria;
	}

	public void setParserTituloAltaMateria(
			ParserTituloAltaMateria parserTituloAltaMateria) {
		this.parserTituloAltaMateria = parserTituloAltaMateria;
	}

	public ValidadorInterface getValidadorAltaMateria() {
		return validadorAltaMateria;
	}

	public void setValidadorAltaMateria(ValidadorInterface validadorAltaMateria) {
		this.validadorAltaMateria = validadorAltaMateria;
	}

	public MateriaDaoInterface getMateriaDao() {
		return materiaDao;
	}

	public void setMateriaDao(MateriaDaoInterface materiaDao) {
		this.materiaDao = materiaDao;
	}


	
	

}
